"""djangodemo URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))

from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]
"""

from django.conf.urls import url
from django.contrib import admin
from django.urls import include
from django.urls import path

from . import views, search

"""
路由
    Django1.1.x 版本
    url() 方法：普通路径和正则路径均可使用，需要自己手动添加正则首位限制符号
    
    Django 2.2.x 之后的版本
    path：用于普通路径，不需要自己手动添加正则首位限制符号，底层已经添加。
    re_path：用于正则路径，需要自己手动添加正则首位限制符号。
    
"""
urlpatterns = [
    url(r'^$', views.hello),  # http://ip:port/
    path('hello/', views.hello),  # http://ip:port/hello/
    path('runoob/', views.runoob),  # http://ip:port/runoob/
    path('body/', views.body),  # http://ip:port/body/

    # 路由分发(include)
    #   存在问题：
    #       Django 项目里多个app目录共用一个 urls 容易造成混淆，后期维护也不方便。
    #   解决：
    #       使用路由分发（include），让每个app目录都单独拥有自己的 urls。
    #   步骤：
    #       1、在每个 app 目录里都创建一个 urls.py 文件。
    #       2、在项目名称目录下的 urls 文件里，统一将路径分发给各个 app 目录

    # 命名空间（英语：Namespace）是表示标识符的可见范围。
    #   一个标识符可在多个命名空间中定义，它在不同命名空间中的含义是互不相干的。
    #   一个新的命名空间中可定义任何标识符，它们不会与任何重复的标识符发生冲突，因为重复的定义都处于其它命名空间中。
    #   存在问题：
    #       路由别名 name 没有作用域，Django 在反向解析 URL 时，会在项目全局顺序搜索，
    #       当查找到第一个路由别名 name 指定 URL 时，立即返回。
    #       当在不同的 app 目录下的urls 中定义相同的路由别名 name 时，可能会导致 URL 反向解析错误。
    #   解决：
    #       使用命名空间。
    #       include(("TestModel.urls", "命名空间"))
    #           TestModel.urls：表示TestModel应用的urls.py文件
    # path("testModel/", include("TestModel.urls")),  # 路由分发使用
    path("testModel/", include(("TestModel.urls", "testModel"))),  # 路由分发及命名空间使用
    path("app01/", include(("app01.urls", "app01"))),  # 路由分发及命名空间使用
    path("app02/", include(("app02.urls", "app02"))),  # 路由分发及命名空间使用
    path("login/", include(("login.urls", "login"))),  # 路由分发及命名空间使用

    url(r'^search-form/$', search.search_form),
    url(r'^search_get/$', search.search_get),
    url(r'^search_post/$', search.search_post),

    # Django Admin 管理工具
    path('admin/', admin.site.urls),  # http://127.0.0.1:8000/admin/
]
